home *** CD-ROM | disk | FTP | other *** search
- ;;; tm-image.el --- tm-view filter to display images in XEmacs or MULE buffers
-
- ;; Copyright (C) 1995,1996,1997 MORIOKA Tomohiko
- ;; Copyright (C) 1996 Dan Rich
-
- ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
- ;; Dan Rich <drich@morpheus.corp.sgi.com>
- ;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
- ;; Created: 1995/12/15
- ;; Version: $Id: tm-image.el,v 7.31 1997/07/14 21:50:01 morioka Exp $
-
- ;; Keywords: image, picture, X-Face, MIME, multimedia, mail, news
-
- ;; This file is part of XEmacs.
-
- ;; This program is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU General Public License as
- ;; published by the Free Software Foundation; either version 2, or (at
- ;; your option) any later version.
-
- ;; This program is distributed in the hope that it will be useful, but
- ;; WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; General Public License for more details.
-
- ;; You should have received a copy of the GNU General Public License
- ;; along with GNU XEmacs; see the file COPYING. If not, write to the
- ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- ;; Boston, MA 02111-1307, USA.
-
- ;;; Commentary:
- ;; If you use this program with MULE, please install
- ;; etl8x16-bitmap.bdf font included in tl package.
-
- ;;; Code:
-
- (require 'tm-view)
-
- (cond (running-xemacs
- (require 'images)
-
- (defun-maybe image-inline-p (format)
- (or (memq format image-native-formats)
- (find-if (function
- (lambda (native)
- (image-converter-chain format native)
- ))
- image-native-formats)
- ))
-
- (image-register-netpbm-utilities)
- (image-register-converter 'pic 'ppm "pictoppm")
- (image-register-converter 'mag 'ppm "magtoppm")
-
- (defun bitmap-insert-xbm-file (file)
- (let ((gl (make-glyph (list (cons 'x file))))
- (e (make-extent (point) (point)))
- )
- (set-extent-end-glyph e gl)
- ))
-
- ;;
- ;; X-Face
- ;;
- (autoload 'highlight-headers "highlight-headers")
-
- (defun mime-preview/x-face-function-use-highlight-headers ()
- (highlight-headers (point-min) (re-search-forward "^$" nil t) t)
- )
-
- (add-hook 'mime-viewer/content-header-filter-hook
- 'mime-preview/x-face-function-use-highlight-headers)
-
- )
- ((featurep 'mule)
- ;; for MULE 2.* or mule merged EMACS
- (require 'x-face-mule)
-
- (defvar image-native-formats '(xbm))
-
- (defun-maybe image-inline-p (format)
- (memq format image-native-formats)
- )
-
- (defun-maybe image-normalize (format data)
- (and (eq format 'xbm)
- (vector 'xbm ':data data)
- ))
-
- ;;
- ;; X-Face
- ;;
- (if (exec-installed-p uncompface-program)
- (add-hook 'mime-viewer/content-header-filter-hook
- 'x-face-decode-message-header)
- )
- ))
-
- (or (fboundp 'image-invalid-glyph-p)
- (defsubst image-invalid-glyph-p (glyph)
- (or (null (aref glyph 0))
- (null (aref glyph 2))
- (equal (aref glyph 2) "")
- ))
- )
-
- (defvar mime-viewer/image-converter-alist nil)
-
- (mapcar (function
- (lambda (rule)
- (let ((ctype (car rule))
- (format (cdr rule))
- )
- (if (image-inline-p format)
- (progn
- (set-alist 'mime-viewer/content-filter-alist
- ctype
- (function mime-preview/filter-for-image))
- (set-alist 'mime-viewer/image-converter-alist
- ctype format)
- (add-to-list
- 'mime-viewer/default-showing-Content-Type-list
- ctype)
- )
- ))))
- '(("image/jpeg" . jpeg)
- ("image/gif" . gif)
- ("image/tiff" . tiff)
- ("image/x-tiff" . tiff)
- ("image/xbm" . xbm)
- ("image/x-xbm" . xbm)
- ("image/x-xpixmap" . xpm)
- ("image/x-pic" . pic)
- ("image/x-mag" . mag)
- ("image/png" . png)
- ))
-
- (defvar mime-viewer/ps-to-gif-command "pstogif")
-
-
- ;;; @ content filter for images
- ;;;
- ;; (for XEmacs 19.12 or later)
-
- (defun mime-preview/filter-for-image (ctype params encoding)
- (let* ((mode mime::preview/original-major-mode)
- (m (assq mode mime-viewer/code-converter-alist))
- (charset (assoc "charset" params))
- (beg (point-min)) (end (point-max))
- )
- (remove-text-properties beg end '(face nil))
- (message "Decoding image...")
- (mime-decode-region beg end encoding)
- (let* ((minor (assoc-value ctype mime-viewer/image-converter-alist))
- (gl (image-normalize minor (buffer-string)))
- e)
- (delete-region (point-min)(point-max))
- (cond ;; ((image-invalid-glyph-p gl)
- ;; (setq gl nil)
- ;; (message "Invalid glyph!")
- ;; )
- ((eq (aref gl 0) 'xbm)
- (let ((xbm-file
- (make-temp-name (expand-file-name "tm" mime/tmp-dir))))
- (insert (aref gl 2))
- (write-region (point-min)(point-max) xbm-file)
- (message "Decoding image...")
- (delete-region (point-min)(point-max))
- (bitmap-insert-xbm-file xbm-file)
- (delete-file xbm-file)
- )
- (message "Decoding image... done")
- )
- (t
- (setq gl (make-glyph gl))
- (setq e (make-extent (point) (point)))
- (set-extent-end-glyph e gl)
- (message "Decoding image... done")
- ))
- )
- (insert "\n")
- ))
-
-
- ;;; @ content filter for Postscript
- ;;;
- ;; (for XEmacs 19.14 or later)
-
- (defun mime-preview/filter-for-application/postscript (ctype params encoding)
- (let* ((mode mime::preview/original-major-mode)
- (m (assq mode mime-viewer/code-converter-alist))
- (beg (point-min)) (end (point-max))
- (file-base (make-temp-name (expand-file-name "tm" mime/tmp-dir)))
- (ps-file (concat file-base ".ps"))
- (gif-file (concat file-base ".gif"))
- )
- (remove-text-properties beg end '(face nil))
- (message "Decoding Postscript...")
- (mime-decode-region beg end encoding)
- (write-region (point-min)(point-max) ps-file)
- (message "Decoding Postscript...")
- (delete-region (point-min)(point-max))
- (call-process mime-viewer/ps-to-gif-command nil nil nil ps-file)
- (set-extent-end-glyph (make-extent (point) (point))
- (make-glyph (vector 'gif :file gif-file)))
- (message "Decoding Postscript... done")
- (delete-file ps-file)
- (delete-file gif-file)
- ))
-
- (set-alist 'mime-viewer/content-filter-alist
- "application/postscript"
- (function mime-preview/filter-for-application/postscript))
-
- (if (featurep 'gif)
- (add-to-list 'mime-viewer/default-showing-Content-Type-list
- "application/postscript")
- )
-
-
- ;;; @ end
- ;;;
-
- (provide 'tm-image)
-
- ;;; tm-image.el ends here
-